import { _decorator, Component, Sprite, SpriteFrame, UITransform, Size } from 'cc';

import { BlockType } from './BlockType';

const { ccclass, property } = _decorator;



@ccclass('Block')

export class Block extends Component {

    @property([SpriteFrame])

    blockFrames: SpriteFrame[] = []; // 方块的图片资源



    private _type: number = 0; // 方块类型

    private _gridX: number = 0;

    private _gridY: number = 0;



    // 获取方块类型

    get type(): number {

        return this._type;

    }



    // 设置方块类型

    set type(value: number) {

        this._type = value;

        this.updateDisplay();

    }



    // 设置方块在网格中的位置

    setGridPosition(x: number, y: number) {

        this._gridX = x;

        this._gridY = y;

    }



    // 获取方块在网格中的位置

    getGridPosition(): { x: number, y: number } {

        return { x: this._gridX, y: this._gridY };

    }



    start() {

        this.setRandomType();

    }



    // 设置随机类型

    setRandomType() {

        this.type = Math.floor(Math.random() * this.blockFrames.length);

    }



    // 更新显示

    updateDisplay() {

        // 获取子节点的 Sprite 组件

        const spriteNode = this.node.getChildByName('Sprite');

        if (!spriteNode) {

            return;

        }



        const sprite = spriteNode.getComponent(Sprite);

        if (!sprite || !this.blockFrames[this._type]) {

            return;

        }



        // 设置精灵帧

        sprite.spriteFrame = this.blockFrames[this._type];



        // 适配尺寸

        this.adaptSpriteSize(sprite);

    }



    // 适配精灵尺寸

    private adaptSpriteSize(sprite: Sprite) {

        const parentTrans = this.node.getComponent(UITransform);

        const spriteTrans = sprite.node.getComponent(UITransform);



        if (!parentTrans || !spriteTrans || !sprite.spriteFrame) {

            return;

        }



        const parentSize = parentTrans.contentSize;

        const originalSize = sprite.spriteFrame.originalSize;



        // 添加边距，防止重叠

        const padding = 10; // 根据需要调整边距

        const availableWidth = parentSize.width - (padding * 2);

        const availableHeight = parentSize.height - (padding * 2);



        // 计算缩放比例

        const scaleX = availableWidth / originalSize.width;

        const scaleY = availableHeight / originalSize.height;

        const scale = Math.min(scaleX, scaleY);



        // 设置精灵尺寸

        const newWidth = originalSize.width * scale;

        const newHeight = originalSize.height * scale;

        spriteTrans.setContentSize(new Size(newWidth, newHeight));



        // 将精灵居中

        sprite.node.setPosition(0, 0, 0);

    }



    // 判断是否可以被消除

    canEliminate(): boolean {

        return this._type >= 0; // 可以根据实际需求调整判断条件

    }



    // 消除方块

    eliminate() {

        // TODO: 播放消除动画

        this.node.destroy();

    }



    // 执行道具效果

    executeEffect() {

        switch (this._type) {

            case BlockType.Large:

                this.triggerLargeEffect();

                break;

            case BlockType.HorizontalStripe:

                this.triggerHorizontalEffect();

                break;

            case BlockType.VerticalStripe:

                this.triggerVerticalEffect();

                break;

            case BlockType.ColorBomb:

                this.triggerColorBombEffect();

                break;

            default:

                // 普通方块无特殊效果

                break;

        }

    }



    // 实现具体效果

    triggerLargeEffect() {

        // 实现大物体的效果

    }



    triggerHorizontalEffect() {

        // 实现横条纹物体的效果

    }



    triggerVerticalEffect() {

        // 实现竖条纹物体的效果

    }



    triggerColorBombEffect() {

        // 实现彩斑点物体的效果

    }

} 
